home *** CD-ROM | disk | FTP | other *** search
/ Shareware Super Platinum 8 / Shareware Super Platinum 8.iso / mac / PROGTOOL / B7T12.ZIP;1 / B7TOOL.DOC < prev    next >
Encoding:
Text File  |  1993-01-11  |  54.6 KB  |  1,305 lines

  1.  
  2.  
  3.                             The B7Tool Library [B7T]
  4.                                    Ver. 1.2a
  5.                   Library Routines for Microsoft BASIC PDS 7.x
  6.                                 by  R. J. Crouch
  7.                          Copyright - 1992-93 - CareWare
  8.                               All Rights Reserved
  9.           ____________________________________________________________
  10.  
  11.  
  12.  
  13.                       **   What is the B7Tool Library?  **
  14.                      ======================================
  15.  
  16.  
  17.           B7Tool  is a collection of innovative and direct programming
  18.           tools, in the form of a user  library,  for  Microsoft  (R),
  19.           BASIC  PDS  7.x.   It  has  emerged  from  a necessity for a
  20.           collection of comprehensive routines to supplement the BASIC
  21.           language.  B7T features;  a comprehensive selection of mouse
  22.           functions,  a  unique  windowing  routine, fast screen save/
  23.           restore routines, fast screen writes, a  bar  menu  routine,
  24.           routines to set and get equipment information, and more.
  25.  
  26.           All  of  the  B7Tool  routines  are easily incorporated into
  27.           almost any BASIC PDS 7.xx source without greatly  increasing
  28.           the efficient size of the "stand-alone" program.  The B7Tool
  29.           Library  is  proposed  as  a  solid foundation from which to
  30.           build your own personal libraries.  These  library  routines
  31.           are  intended  for  use  by  individuals with some BASIC PDS
  32.           programming experience.
  33.  
  34.  
  35.  
  36.                **   Things to know about the B7Tool Library   **
  37.               ===================================================
  38.  
  39.  
  40.           B7Tool is being distributed as a  Shareware  product.   This
  41.           program  is not free and is copyrighted to CareWare with all
  42.           rights reserved.  If you find B7T of value and  continue  to
  43.           use  its services beyond a 30 day trial period, then you are
  44.           required  to  register  your  copy   with   CareWare.    The
  45.           registration  fee  for  B7Tool, on disk with OBJ modules, is
  46.           $25.00 (US).  A  registration  form  is  provided  for  your
  47.           convenience.  Please see the last page of this document.
  48.  
  49.           B7Tool  may  be  shared  with  others  as long as it remains
  50.           unaltered and distributed in its entirety.   A  distribution
  51.           fee,  not to exceed $8.00, may be imposed by disk vendors to
  52.           cover shipping and  handling  costs.   The  following  files
  53.           comprise  the  whole  of  this  product  and  was originally
  54.           distributed as the self-extracting  file  B7T12.EXE  or  the
  55.           ZIPed file B7T12.ZIP.
  56.  
  57.               B7T.LIB        B7T.QLB        B7T.BI       B7TOOL.DOC
  58.               B7T-DEMO.BAS   B7T-DEMO.EXE   VENDOR.DOC   README.TXT
  59.               REGISTER.TXT   FILE_ID.DIZ
  60.  
  61.  
  62.  
  63.                **   Things to know about the B7Tool Library   **
  64.               ===================================================
  65.  
  66.  
  67.           The B7Tool Library is presented as-is and with no warranties
  68.           expressed or implied.  CareWare  assumes  no  responsibility
  69.           for  this products use, misuse, or lose of any kind incurred
  70.           by its use.
  71.  
  72.           Upon  your  completed  registration  you  are  granted  full
  73.           unrestricted single user  operation  and  support  for  this
  74.           product.  There are no additional licensing fees for modules
  75.           compiled  and  linked  into  products  you  distribute.  Any
  76.           comments or  suggestions  are  gratefully  accepted  and  an
  77.           honest attend will be made to answer them.
  78.  
  79.           Microsoft is a registered trademark of the Microsoft Corp.
  80.  
  81.  
  82.  
  83.                    **   What the B7Tool Library provides   **
  84.                   ============================================
  85.  
  86.  
  87.           Mouse Services:  Mouse*()
  88.           -------------------------
  89.  
  90.           A  majority  of  the  routines  in  B7T  pertain  to   mouse
  91.           functions.   These  functions  will  allow  a  programmer to
  92.           incorporate the much needed  mouse  services  into  any  de-
  93.           manding  application.   They  are  intelligently  written to
  94.           compensate for a few idiosyncrasies that tend to emerge from
  95.           the mouse interrupt (33H).
  96.  
  97.  
  98.           Windowing:  DoWindow()
  99.           ----------------------
  100.  
  101.           Windowing  for  today's applications  is  not  new, but this
  102.           windowing routine adds a few features that will enhance  any
  103.           program.   The  screen write for this routine is serviced by
  104.           machine code for  a  fast  and  clean  appearance.   Select-
  105.           ability for title location, type and location of shadow, and
  106.           a solid frame, make this windowing routine unique from other
  107.           we have seen.
  108.  
  109.  
  110.           Screen save/restore:  PutScrn()/GetScrn()
  111.           -----------------------------------------
  112.  
  113.           The ability to save and later restore a screen's contents is
  114.           essential  for contemporary programming.  These two routines
  115.           are designed to work within the BASIC PDS environment.  They
  116.           make use of BASIC PDS's string  descriptor  block  functions
  117.           for  ease of use.  This pair of routines is written entirely
  118.           of machine code for instant results.
  119.  
  120.  
  121.  
  122.                    **   What the B7Tool Library provides   **
  123.                   ============================================
  124.  
  125.  
  126.           Screen print:  PrtScrn()
  127.           ------------------------
  128.  
  129.           This is a little machine code routine that will print to the
  130.           screen,  at the location and color desired, any string vari-
  131.           able.  It's fast, compact, and simulates in  just  one  CALL
  132.           BASIC  PDS's  LOCATE,  COLOR,  and  PRINT  statements.  This
  133.           routine is the heart of  the  windowing  procedure  and  the
  134.           reason for its speed.
  135.  
  136.  
  137.           Equipment Information:  Get*() and Set*()
  138.           -----------------------------------------
  139.  
  140.           These  routines will retrieve and set various system  equip-
  141.           ment  information.   These  types  of  services  give   your
  142.           programs  the  kind  of  information  it  needs  for  proper
  143.           application and system interaction.
  144.  
  145.  
  146.           Pull-Down Bar Menu:  BarMenu()
  147.           ------------------------------
  148.  
  149.           This  routine  provides  a  comprehensive and easy means for
  150.           establishing an application menu system.  BarMenu  is  fully
  151.           configurable  with five color attributes and is both key and
  152.           mouse driven.  (A great value to any Library)
  153.  
  154.  
  155.           Screen string centering:  Ctr()
  156.           -------------------------------
  157.  
  158.           This  is  a  handy  little  function that returns the column
  159.           position needed to center string data or  variables  on  the
  160.           screen.   It  can  easily  be  incorporated into BASIC PDS's
  161.           LOCATE statement.  [i.e.  LOCATE 12, Ctr(strg$)]
  162.  
  163.  
  164.           Program delays:  Delay()
  165.           ------------------------
  166.  
  167.           This  is a smart replacement for BASIC PDS's SLEEP statement
  168.           (which, by the way, takes over 2K of executable code).   The
  169.           delay  can either be forced or user bypassed with any key or
  170.           mouse button.
  171.  
  172.  
  173.  
  174.                    **   What the B7Tool Library provides   **
  175.                   ============================================
  176.  
  177.  
  178.           Access to system interrupts
  179.           ---------------------------
  180.  
  181.           Incorporated (LINKed) within the B7Tool Library are  BASIC's
  182.           QBX.QLB  (C),  QBX.LIB (C) and QBX.BI (C).  These files were
  183.           necessary in the writing of various routines that  make  use
  184.           BASIC's Interrupt() service.  Because of their presence, you
  185.           also  have  access to DOS service calls.  This is a powerful
  186.           feature for any programmer.
  187.  
  188.  
  189.  
  190.                **   What the B7Tool Library does not provide   **
  191.               ====================================================
  192.  
  193.  
  194.           B7Tool  does  not  contain routines for data input or manip-
  195.           ulation.  It is felt these  type  of  procedures  should  be
  196.           handled  by  the programmer for their particular application
  197.           needs.  Absent also from this library is  the  abundance  of
  198.           routines  that  can't  possibly  be  incorporated into every
  199.           program.  B7T is intended to be a quality library from which
  200.           to build from.
  201.  
  202.  
  203.  
  204.                **   The nuts and bolts of the B7Tool Library   **
  205.               ====================================================
  206.  
  207.  
  208.           The following is a clarified description of  the  prototypes
  209.           used in the CALL's to these B7Tool library routines.  Please
  210.           note  the  variable  types  used  for the arguments in these
  211.           routines.  The mouse service calls are designed to work with
  212.           a Microsoft (R) mouse driver or close  compatible.   Examin-
  213.           ation  of  the demo source code can aid in understanding the
  214.           use of these routines.
  215.  
  216.  
  217.           -------------------
  218.           MouseStatus(Ready%)
  219.           -------------------
  220.           This routine does a nondestructive interrupt vector check to
  221.           determine  the  existence  of  a mouse driver.  This routine
  222.           should be called prior to using any of the other  B7T  mouse
  223.           routines  to  insure  the  presence  of  the mouse interrupt
  224.           (33H).  (if present the mouse is enabled - function 20H)
  225.  
  226.           Passed:  An integer variable
  227.  
  228.           Returns: 0 if a mouse driver is not detected
  229.                    1 if a mouse driver has been installed
  230.  
  231.           Example:  CALL MouseStatus(have%)
  232.  
  233.  
  234.           ----------------
  235.           MouseReset(Set%)
  236.           ----------------
  237.           This routine will initialize the mouse driver and will allow
  238.           the saving and restoring of two separate mouse states.
  239.  
  240.           Passed:  An initialized integer variable or constant
  241.                    0 = hard reset - initializes mouse driver, turns
  242.                        mouse pointer off and disables any prior
  243.                        user installed events (function 00H)
  244.                    1 = soft reset - reset mouse driver and turns
  245.                        pointer off (function 21H)
  246.                    2 = will save the current mouse state to mouse
  247.                        buffer #1
  248.                    3 = will restore the mouse state as saved in mouse
  249.                        buffer #1
  250.                    4 = will save the current mouse state to mouse
  251.                        buffer #2
  252.                    5 = will restore the mouse state as saved in mouse
  253.                        buffer #2
  254.  
  255.           Returns:  If passed a variable initialized to 0, will reset
  256.                     mouse and return number of buttons installed, else
  257.                     returns nothing
  258.  
  259.           Example:  buttons% = 0
  260.                     CALL MouseReset(buttons%)
  261.  
  262.  
  263.  
  264.           ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  265.           Note:  Not   all   mouse  drivers  support  the  saving  and
  266.                  restoring of the mouse state  (MouseReset(2 thru 5)).
  267.                  If  it  is  your intention to distribute programs for
  268.                  maximum compatibility, you should refrain from  using
  269.                  these reset features.
  270.           ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  271.  
  272.  
  273.           ----------------------
  274.           MouseVersion(Version$)
  275.           ----------------------
  276.           This routine will return both the major and minor version of
  277.           the mouse driver installed.
  278.  
  279.           Passed:  A string variable at lease 5 characters in length
  280.  
  281.           Returns:  A string containing the version of the mouse
  282.                     driver installed.  (i.e.  6.123)
  283.  
  284.           Example:  CALL MouseVersion(ver$)
  285.  
  286.  
  287.           ---------------------
  288.           MouseVisible(Status%)
  289.           ---------------------
  290.           This routine will allow  the  mouse  pointer  to  be  either
  291.           turned  on  or  off.  This routine has been stabilized by an
  292.           internal variable to  compensate  for  the  mouse  interrupt
  293.           counter.   Recursive  calls  to  the  same  Status% will not
  294.           increase or decrease the mouse interrupt counter.  This will
  295.           only be done by opposing Status% calls.
  296.  
  297.           Passed:  An initialized integer variable or constant
  298.                    0 = mouse pointer off
  299.                    1 = mouse pointer on
  300.  
  301.           Returns:  Nothing
  302.  
  303.           Examples:  CALL MouseVisible(1)
  304.                      or
  305.                      off% = 0
  306.                      CALL MouseVisible(off%)
  307.  
  308.  
  309.           ----------------------------------------
  310.           MouseLocate(ScrnRowY%, ScrnColX%, Mode%)
  311.           ----------------------------------------
  312.           This routine will place the  mouse  pointer  at  the  screen
  313.           location  indicated  by its arguments.  The Mode switch will
  314.           allow the location to be given  in  either  row/column  text
  315.           positions or X/Y pixel positions.
  316.  
  317.           Passed:  3 initialized integer variables or constants
  318.                    Mode 0 = pixel positions
  319.                       ScrnColX% = horizontal (X) position with a value
  320.                                   from 0 to 632
  321.  
  322.  
  323.  
  324.                       ScrnRowY% = vertical (Y) position with a value
  325.                                   from 0 to 192
  326.  
  327.                    note:  The pixel given is the upper left dot of
  328.                           the standard 8x8 mouse pointer.  Pixel
  329.                           positions start from 0,0.
  330.  
  331.                    Mode 1 = text positions
  332.                       ScrnColX% = text column position with a value
  333.                                   from 1 to 80
  334.                       ScrnRowY% = text row position with a value from
  335.                                   1 to 25
  336.  
  337.           Returns:  Nothing
  338.  
  339.           Examples:  CALL MouseLocate(12, 30, 1)
  340.                      or
  341.                      CALL MouseLocate(y%, x%, 0)
  342.  
  343.  
  344.           ------------------------------------------
  345.           MousePosition(ScrnRowY%, ScrnColX%, Mode%)
  346.           ------------------------------------------
  347.           This  routine  will return the current position of the mouse
  348.           pointer.  The Mode switch will allow the  location  returned
  349.           to be either given in row/column text positions or X/Y pixel
  350.           positions.
  351.  
  352.           Passed:  2 integer variables and 1 initialized integer
  353.                    variable or constant (Mode%)
  354.                    Mode 0 = returned values represent X/Y pixel
  355.                             positions
  356.                    Mode 1 = returned values represent row/column
  357.                             positions
  358.  
  359.           Returns:  An integer value
  360.                     Mode 0
  361.                        ScrnColX% = current horizontal (X) position of
  362.                                    mouse pointer as represented by
  363.                                    pixels (0 to 632)
  364.                        ScrnRowY% = current vertical (Y) position of
  365.                                    mouse pointer as represented by
  366.                                    pixels (0 to 192)
  367.  
  368.                     note:  The pixel returned is the upper left dot
  369.                            of the standard 8x8 mouse pointer.  Pixel
  370.                            positions start from 0,0.
  371.  
  372.                     Mode 1
  373.                        ScrnColX% = current column position of mouse
  374.                                    pointer (1 to 80)
  375.                        ScrnRowY% = current row position of mouse
  376.                                    pointer (1 to 25)
  377.  
  378.           Example:  CALL MousePosition(TextRow%, TextCol%, 1)
  379.  
  380.  
  381.  
  382.           ------------------------------------------------------------
  383.           MouseLimits(UpRowY%, LeftColX%, LowRowY%, RightColX%, Mode%)
  384.           ------------------------------------------------------------
  385.           This routine will let you limit  the  motion  of  the  mouse
  386.           pointer.    The   mouse   pointer  will  reside  within  the
  387.           boundaries  specified  by  the  arguments  passed  to   this
  388.           routine.  The  Mode switch will allow the limited area to be
  389.           either given in  row/column  text  positions  or  X/Y  pixel
  390.           positions.
  391.  
  392.           Passed:  5 initialized integer variables or constants
  393.                    Mode 0 = pixel positions
  394.                       LeftColX% = left horizontal (X) position with a
  395.                                   value from 0 to 632
  396.                       UpRowY% = upper vertical (Y) position with a
  397.                                 value from 0 to 192
  398.                       RightColX% = right horizontal (X) position with
  399.                                   a value from LeftColX% to 632
  400.                       LowRowX% = lower vertical (Y) position with a
  401.                                   value from UpRowY% to 192
  402.  
  403.                    note:  The pixel given is the upper left dot of
  404.                           the standard 8x8 mouse pointer.  Pixel
  405.                           positions start from 0,0.
  406.  
  407.                    Mode 1 = text positions
  408.                       LeftColX% = left column position with a value
  409.                                   from 1 to 80
  410.                       UpRowY% = upper row position with a value from
  411.                                 1 to 25
  412.                       RightColX% = right column position with a value
  413.                                    from LeftColX% to 80
  414.                       LowRowY% = lower row position with a value from
  415.                                  UpRowY% to 25
  416.  
  417.           Returns:  Nothing
  418.  
  419.           Example:  CALL MouseLimits(10, 25, 15, 55, 1)
  420.  
  421.  
  422.  
  423.           -------------------------------------------------------------
  424.           MouseExclude(UpRowY%, LeftColX%, LowRowY%, RightColX%, Mode%)
  425.           -------------------------------------------------------------
  426.           This  routine  will  allow  the mouse pointer to be excluded
  427.           from any portion of the screen as specified by the arguments
  428.           passed to this routine.  When the mouse pointer  enters  the
  429.           excluded  boundaries,  the pointer is turned off.  The mouse
  430.           interrupt (33H)  does  not,  however,  reinstate  the  mouse
  431.           pointer  to the on condition upon exiting the excluded area.
  432.           This process must be performed within the  programming  code
  433.           itself.    The   excluded   area  cannot  be  saved  by  the
  434.           MouseReset() routines.  The mode switch will allow  the  ex-
  435.           cluded  area to be either given in row/column text positions
  436.           or X/Y pixel positions.
  437.  
  438.           Passed:  5 initialized integer variables or constants
  439.                    Mode 0 = pixel positions
  440.                       LeftColX% = left horizontal (X) position with a
  441.                                   value from 0 to 632
  442.                       UpRowY% = upper vertical (Y) position with a
  443.                                 value from 0 to 192
  444.                       RightColX% = right horizontal (X) position with
  445.                                    a value from LeftColX% to 632
  446.                       LowRowX% = lower vertical (Y) position with a
  447.                                  value from UpRowY% to 192
  448.  
  449.                    note:  The pixel given is the upper left dot of
  450.                           the standard 8x8 mouse pointer.  Pixel
  451.                           positions start from 0,0.
  452.  
  453.                    Mode 1 = text positions
  454.                       LeftColX% = left column position with a value
  455.                                   from 1 to 80
  456.                       UpRowY% = upper row position with a value from
  457.                                 1 to 25
  458.                       RightColX% = right column position with a value
  459.                                    from LeftColX% to 80
  460.                       LowRowY% = lower row position with a value from
  461.                                  UpRowY% to 25
  462.  
  463.           Returns:  Nothing
  464.  
  465.           Example:  CALL MouseExclude(15, 20, 21, 35, 1)
  466.  
  467.  
  468.  
  469.           -------------------------------------------------
  470.           MouseClick(LeftClick%, MiddleClick%, RightClick%)
  471.           -------------------------------------------------
  472.           This  routine  will  return  a  value indicating the current
  473.           mouse button in use.  The value is only  returned  upon  the
  474.           release  of  the button, thus returning the value only once.
  475.           This allows the mouse button status to be  effectively  used
  476.           within a loop.
  477.  
  478.           Passed:  3 integer variables
  479.  
  480.           Returns:  0 = button not in use
  481.                     1 = button has been clicked
  482.  
  483.           Example:  CALL MouseClick(lft%, mid%, rgt%)
  484.  
  485.  
  486.           -----------------------------------------------------
  487.           MouseScroll(LeftButton%, MiddleButton%, RightButton%)
  488.           -----------------------------------------------------
  489.           This routine will return  a  value  indicating  the  current
  490.           mouse   button   being  pressed.   This  value  will  remain
  491.           constant until the button is released.
  492.  
  493.           Passed:  3 integer variables
  494.  
  495.           Returns:  0 = button not in use
  496.                     1 = button is being pressed
  497.  
  498.           Example:  CALL MouseScroll(lft%, mid%, rgt%)
  499.  
  500.  
  501.           --------------------------------
  502.           MouseCursor(Fore%, Back%, Char%)
  503.           --------------------------------
  504.           This routine allows you to change the character and color of
  505.           the mouse pointer.
  506.  
  507.           Passed:  3 initialized integer variables or constants
  508.                    Fore = foreground color for the new pointer
  509.                           (within a range of 0 to 15)
  510.                    Back = background color for the new pointer
  511.                           (within a range of 0 to 7)
  512.                    Char = ASCII decimal value for the character of the
  513.                           new pointer (within a range of 0 to 255)
  514.  
  515.           Returns:  Nothing
  516.  
  517.           Example:  CALL MouseCursor(12, 7, 30)
  518.  
  519.           ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  520.           Note:  Not all mouse drivers support  the  changing  of  the
  521.                  mouse  cursor.  If  it  is  your intent to distribute
  522.                  programs for maximum compatibility, then  you  should
  523.                  consider not using this function.
  524.           ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  525.  
  526.  
  527.  
  528.           --------------------------------------------------------
  529.           DoWindow(UpR%, LfC%, VSz%, HSz%, Att%, Frm%, Shw%, Txt$,
  530.                    Lct%)
  531.           --------------------------------------------------------
  532.           This routine will create attractive application  windows  at
  533.           any  screen  position.  You have control over color, type of
  534.           frame and color, type and location of shadow,  and  location
  535.           of  window title and style.  This windowing routine offers a
  536.           wide variety of possibilities.
  537.  
  538.           Passed:  8 initialized integer variables or constants
  539.                    1 string variable or constant for title
  540.                    UpR = upper row position for start of window
  541.                          (within a range of 1 to 24)
  542.                    LfC = left column position for start of window
  543.                          (within a range of 1 to 79)
  544.                    VSz = vertical size of window (# of rows)
  545.                          (within a range of 26 minus UpR)
  546.                    HSz = horizontal size of window (# of columns)
  547.                          (within a range of 81 minus LfC)
  548.                    Att = attribute of window colors
  549.                          (within a range of 0 to 127)
  550.                          ( (background * 16) + foreground )
  551.                          Note:  Adding 128 to the attribute will
  552.                                 produce a blinking foreground
  553.                    Frm = frame type, if any
  554.                          0 = no frame
  555.                          1 = single line
  556.                          2 = double line
  557.                          3 = single vertical and double horizontal
  558.                          4 = single horizontal and double vertical
  559.                          5 = solid frame enclosing the window
  560.                    Shw = shadow location and type, if any
  561.                          0 = no shadow
  562.                          1 = shadow left side and bottom of window
  563.                              (black in color)
  564.                          2 = shadow right side and bottom of window
  565.                              (black in color)
  566.                          3 = shadow left side and bottom of window
  567.                              (tinted black)
  568.                          4 = shadow right side and bottom of window
  569.                              (tinted black)
  570.                          note:  Tinted black is a combination, with
  571.                                 ASCII character #177, of the color
  572.                                 attribute outside the window and black.
  573.                          5 = shadow left side and bottom of window
  574.                              (shadowed character)
  575.                          6 = shadow right side and bottom of window
  576.                              (shadowed character)
  577.                          note:  The characters within the shadowed
  578.                                 area are displayed using attribute 8.
  579.                    Txt = string variable or constant used for the
  580.                          title of the window
  581.                          note: Empty double quotes ("") or a string
  582.                                initialized to null will not produce
  583.                                a title.
  584.  
  585.  
  586.  
  587.                    Lct = determines the location of the title, if any
  588.                          0 = title at top without brackets
  589.                          1 = title at bottom without brackets
  590.                          2 = title at top with brackets
  591.                          3 = title at bottom with brackets
  592.                          note:  If a title is not present, the
  593.                                 location value has no effect.
  594.  
  595.                    note:  The horizontal and vertical size cannot be
  596.                           less then 2.
  597.  
  598.           Returns:  Nothing
  599.  
  600.           Examples:  CALL DoWindow(5, 10, 15, 60, 98, 5, 3, "", 0)
  601.                      or
  602.                      CALL DoWindow(Rw, Cl, Rn, Cn, 4, 0, 0, Text$, 2)
  603.  
  604.  
  605.           -----------------
  606.           PutScrn(ScrnBuf$)
  607.           -----------------
  608.           This routine will allow you to save the entire  contents  of
  609.           the  screen currently being displayed.  The screen saved can
  610.           later be retrieved and displayed with the companion  routine
  611.           GetScrn().  The screen's contents is saved to a string vari-
  612.           able or array initialized  to  4000  characters  in  length.
  613.           (i.e.  DIM ScrnBuf(3) AS STRING * 4000)
  614.  
  615.           Passed:  An initialized string variable or array at least
  616.                    4000 characters in length
  617.  
  618.           Returns:  current screen's contents
  619.  
  620.           Examples:  DIM ScrnBuf AS STRING * 4000
  621.                      CALL PutScrn(ScrnBuf)
  622.                      or
  623.                      DIM SHARED ScrnBufArr(2) AS STRING * 4000
  624.                      CALL PutScrn(ScrnBufArr(0))  [default option base]
  625.  
  626.  
  627.           -----------------
  628.           GetScrn(ScrnBuf$)
  629.           -----------------
  630.           This routine will allow you  to  retrieve  and  display  the
  631.           contents  of  the  screen  saved  by  its  companion routine
  632.           PutScrn().
  633.  
  634.           Passed:  The string variable or array that contains the
  635.                    screen to be displayed.
  636.  
  637.           Returns:  Nothing  (contents of buffer are displayed)
  638.  
  639.           Examples:  CALL GetScrn(ScrnBuf)
  640.                      or
  641.                      CALL GetScrn(ScrnBufArr(1))
  642.  
  643.  
  644.  
  645.           ---------------------------------
  646.           PrtScrn(Strg$, Row%, Col%, Attr%)
  647.           ---------------------------------
  648.           This is a machine language routine that will print a  string
  649.           variable or constant to the screen at the location and color
  650.           indicated  by its arguments.  The attribute is a combination
  651.           of  the  foreground  and  background  colors  and   can   be
  652.           determined  by  the  following  formula: (background * 16) +
  653.           foreground.
  654.  
  655.           Passed:  3 initialized integer variables or constants
  656.                    1 initialized string variable or constant
  657.                    Strg = string variable or constant to be displayed
  658.                    Row  = screen row for display
  659.                           (within a range of 1 to 25)
  660.                    Col  = screen column for display
  661.                           (within a range of 1 to 80)
  662.                    Attr = attribute of color to be displayed
  663.                           (within a range of 0 to 127)
  664.                           Note:  Adding 128 to the attribute will
  665.                                  produce a blinking foreground
  666.  
  667.           Returns:  Nothing
  668.  
  669.           Examples:  CALL PrtScrn("Hello Universe", 12, 33, 110)
  670.                      or
  671.                      CALL PrtScrn(hello$, rw%, cl%, att%)
  672.  
  673.  
  674.           ------------------------------
  675.           GetDrive(TotDrives%, CurDrive%
  676.           ------------------------------
  677.           This routine returns the total number of drives installed on
  678.           a system,  the  current  drive  location,  and  the  current
  679.           directory location.
  680.  
  681.           Passed:  2 integer variables
  682.  
  683.           Returns:  TotDrives% = total number of disk drives installed
  684.                                  on system
  685.                     CurDirve% = numeric value indicating current drive
  686.                                 (1=A:, 2=B:, 3=C: and so on)
  687.  
  688.           Example:  CALL GetDrive(TotDrv%, CurDrv%)
  689.  
  690.  
  691.  
  692.           -------------------
  693.           SetDrive(DriveNum%)
  694.           -------------------
  695.           This routine allows you to change the current drive location
  696.           within  an application.  Valid drive numbers range from 1 to
  697.           26.  No action is taken if the drive number supplied is  not
  698.           valid or the drive does not exist on the system.
  699.  
  700.           Passed:  An initialized integer variable or constant
  701.                    (1=A:, 2=B:, 3=C: and so on up to 26)
  702.  
  703.           Returns:  Nothing
  704.  
  705.           Examples:  CALL SetDrive(3)
  706.                      or
  707.                      NewDrv% = 2
  708.                      CALL SetDrive(NewDrv%)
  709.  
  710.  
  711.           --------------------
  712.           DriveSpc(Available&)
  713.           --------------------
  714.           This  routine  will  return the total bytes available on the
  715.           disk drive supplied.  The routine is useful when wanting  to
  716.           know  if  enough  disk  space  remains on a drive to write a
  717.           file.
  718.  
  719.           Passed:  A long integer containing the drive number to check
  720.                    (1=A:, 2=B:, 3=C: and so on)
  721.  
  722.           Returns:  The total bytes available on specified drive
  723.  
  724.           Example:  Drv& = 2
  725.                     CALL DriveSpc(Drv&)
  726.  
  727.  
  728.           -------------------------
  729.           GetSize(FileName$, Size&)
  730.           -------------------------
  731.           This  routine  returns  the  file  size  of  the  given file
  732.           specification.  This routine is useful for determining if  a
  733.           file is present.
  734.  
  735.           Passed:  1 initialized string or constant containing  the
  736.                        file name and its location, if any
  737.                        (i.e.  C:\B7T\B7T-DEMO.EXE)
  738.                    1 long integer variable
  739.  
  740.           Returns:  Size& = size of specified file.  If 0 is returned,
  741.                             file was not found.
  742.  
  743.           Examples:  CALL GetSize("B7T.LIB", FSize&)
  744.                      or
  745.                      FileSpec$ = "D:\WP\TEST.TXT"
  746.                      CALL GetSize(FileSpec$, FSize&)
  747.                      IF FSize& <> 0 THEN... etc.
  748.  
  749.  
  750.  
  751.           -------------------
  752.           GetDOS(VersionNum$)
  753.           -------------------
  754.           This routine return a string containing the version  of  DOS
  755.           currently  used  by a computer system.  The routine is handy
  756.           when wanting to know what  system  interrupts  you  can  use
  757.           based on the DOS version installed.
  758.  
  759.           Passed:  A string variable
  760.  
  761.           Returns:  VersionNum$ = current DOS version (i.e.  5.0)
  762.  
  763.           Example:  CALL GetDOS(Ver$)
  764.  
  765.  
  766.           ----------------------------------------------------------
  767.           GetVideo(Mode%, Page%, Col%, CurStart%, CurStop%, CurAtt%)
  768.           ----------------------------------------------------------
  769.           This routine can provide you with necessary information on a
  770.           system's current video state.  If used at the beginning of a
  771.           program, the  information  retrieved  can  be  used  at  its
  772.           closing to restore a system's video status.
  773.  
  774.           Passed:  6 Integer variables
  775.  
  776.           Returns:  Mode% = current video mode as outlined by Int 10H,
  777.                             Function 00H
  778.                     Page% = current video page number
  779.                     Col% = number of columns for current video mode
  780.                     CurStart% = starting scan line for cursor
  781.                     CurStop% = ending scan line for cursor
  782.                     CurAtt% = color attribute at cursor position
  783.  
  784.           Example:  CALL GetVideo(VMd%, VPg%, Col%, CSt%, CSp%, CAt%)
  785.  
  786.  
  787.           ---------------
  788.           SetVideo(Mode%)
  789.           ---------------
  790.           This  routine  allows you to set a desired video mode.  When
  791.           used in conjunction with the value returned by GetVideo(), a
  792.           system's video mode, if changed within  a  program,  can  be
  793.           restored to it initial state.
  794.  
  795.           Passed:   An  initialized  integer  variable  or constant as
  796.                     outlined by Int 10H, Function 00H
  797.  
  798.           Returns:  Nothing
  799.  
  800.           Examples:  CALL SetVideo(3)
  801.                      or
  802.                      VMode% = 1
  803.                      CALL SetVideo(VMode%)
  804.  
  805.  
  806.  
  807.           ---------------------
  808.           GetComPorts(HowMany%)
  809.           ---------------------
  810.           This  routine will return the number of serial ports install
  811.           on a computer.
  812.  
  813.           Passed:  An integer variable
  814.  
  815.           Returns:  Number of serial ports installed
  816.  
  817.           Example:  CALL GetComPorts(NumOfPorts%)
  818.  
  819.  
  820.           -----------------
  821.           Get87(DoWeHave%)
  822.           -----------------
  823.           This routine will return a True or False value  representing
  824.           the presence of a math coprocessor.
  825.  
  826.           Passed:  An integer variable
  827.  
  828.           Returns:  -1 = A math coprocessor has been detected
  829.                      0 = No math coprocessor has been detected
  830.  
  831.           Example:  CALL Get87(Have87%)
  832.                     IF Have87 THEN... etc.
  833.  
  834.  
  835.  
  836.           -------------------------------------------------------------
  837.           BarMenu(MenuStr(), A1%, A2%, A3%, A4%, A5%, S%, M%, R1%, R2%)
  838.           -------------------------------------------------------------
  839.           This is a comprehensive top line pull-down bar menu routine.
  840.           It's  configurable  with five color attributes, window frame
  841.           style, and mouse support.  This routine allows you to add  a
  842.           full  and  attractive  menu to any application.  New to this
  843.           routine is an argument allowing you  to  shadow  the  menu's
  844.           pull-down windows.
  845.  
  846.           Passed:  MenuStr() - a two dimensional string array contain-
  847.                                ing the menu items
  848.  
  849.                      Note:  The (0, 0) element of MenuStr() holds the
  850.                             upper limits of each second dimension.
  851.                             (i.e.  MenuStr(0, 0) = "03050402").
  852.                             Each 2d dimension 0 element for each 1st
  853.                             dimension holds the level 1 menu item.
  854.  
  855.                    A1% - color attribute of level 1 menu bar
  856.                    A2% - color attribute for highlighted first letter
  857.                          of level 1 menu bar
  858.  
  859.                      Note:  If these two attributes (A1 & A2) are NOT
  860.                             the same value and the first letter of
  861.                             all level 1 menu titles are different,
  862.                             then BarMenu() will pick the proper menu
  863.                             title by pressing the highlighted letter.
  864.  
  865.                    A3% - color attribute of level 2 menu window
  866.                    A4% - color attribute of level 2 menu window text
  867.                    A5% - color attribute of level 2 menu window
  868.                          highlighted test (item selected)
  869.                    S% - shadow type for menu windows (see DoWindow()
  870.                         shadow types for argument values)
  871.                    M% - a True (-1) or False (0) value indicating
  872.                         if a mouse is to be used
  873.  
  874.                      Note:  If a mouse is used, the mouse cursor is
  875.                             turned off upon entering BarMenu() and
  876.                             then turned on upon exiting.
  877.  
  878.                    R1% - an integer value indicating the number of
  879.                          spaces between each level 1 menu item
  880.                    R2% - frame style used for the level 2 menu window
  881.                          (see DoWindow() for styles - default 5)
  882.  
  883.           Returns:  R1% - level 1 menu item picked
  884.                     R2% - level 2 menu item picked
  885.  
  886.                       Note:  If the <ESC> key or RIGHT mouse button is
  887.                              pressed the values returned are 0 and the
  888.                              menu exits.
  889.  
  890.  
  891.  
  892.           Example:  DIM MenuStr(4, 5) AS STRING
  893.                     [ Initialize your array elements           ]
  894.                     [   MenuStr(0, 0) = "03050402"             ]
  895.                     [   MenuStr(1, 0) = " File Information "   ]
  896.                     [   MenuStr(1, 1) = " Get File Size "      ]
  897.                     [   MenuStr(1, 2) = " View File     "      ]
  898.                     [   Etc...                                 ]
  899.                     S% = 6: M% = -1: R1% = 3: R2% = 3
  900.                     CALL BarMenu(MenuStr(), 11, 4, 112, 113, 116,  S%,
  901.                                  M%, R1%, R2%)
  902.  
  903.           Note:  Please  see  the  Demo source code (B7T-DEMO.BAS) for
  904.                  additional information and an example on the  use  of
  905.                  this routine.
  906.  
  907.  
  908.           ------------
  909.           Ctr(String$)
  910.           ------------
  911.           This  is  a  handy  little  function that returns the column
  912.           position needed to screen center a string variable.  It  can
  913.           easily be incorporated into BASIC's LOCATE statement.
  914.  
  915.           Passed:  An initialized string variable
  916.  
  917.           Returns:  Column position needed to screen center a
  918.                     string variable.
  919.  
  920.           Examples:  LOCATE 12, Ctr(Strg$)
  921.                      or
  922.                      cntr = Ctr(Strg$)
  923.                      LOCATE 12, cntr
  924.  
  925.  
  926.           ----------------------------------
  927.           Delay(Length!, Forced%, UseMouse%)
  928.           ----------------------------------
  929.           This routine is a smart alternative  to  BASIC  PDS's  SLEEP
  930.           statement  or the numerous appearances of LOOPs.  This delay
  931.           can either be forced or user bypass  with  the  keyboard  or
  932.           mouse  buttons  (if installed).  The delay makes use of real
  933.           time so CPU speed has little effect.
  934.  
  935.           Passed:  2 initialized integer variable or constant
  936.                    1 initialized long variable or constant
  937.  
  938.                    Length = single precision integer indicating the
  939.                             length of the delay in seconds
  940.  
  941.  
  942.  
  943.                    Forced = integer indicating the type of delay
  944.                             0 = not forced (can be bypassed with
  945.                                 any key or mouse button)
  946.                            -1 = delay is forced (remains in effect
  947.                                 until specified time has elapsed)
  948.                    UseMouse = integer indicating if a mouse can be
  949.                               used for a button response
  950.                               0 = do not use a mouse for response
  951.                              -1 = a mouse is present and used for a
  952.                                   response
  953.  
  954.                    note:  If both Length and Forced are 0, then
  955.                           Delay() will wait indefinitely until any
  956.                           key or mouse button (if present) is pressed.
  957.  
  958.           Returns:  Nothing
  959.  
  960.           Examples:  CALL Delay(.25, 1, 0)
  961.                      or
  962.                      lgth! = 1.25
  963.                      Forced% = False
  964.                      Mouse% = True
  965.                      CALL Delay(lgth1!, Forced%, Mouse%)
  966.  
  967.  
  968.           --------------------------------------
  969.           QBX.QLB (C) - QBX.LIB (C) - QBX.BI (C)
  970.           --------------------------------------
  971.           These three BASIC PDS  files  are  incorporated  into  B7T's
  972.           libraries.   They  are necessary for the DOS interrupts used
  973.           by the mouse routines.  The  following  is  a  list  of  the
  974.           services   provided   by  these  files.   Because  of  their
  975.           presence, you also have access to these important  services.
  976.           Please  consult  your  BASIC  PDS  7.x reference manuals for
  977.           information on the use  of  these  BASIC  PDS  CALL's.   The
  978.           demonstration  source  code  (B7T-DEMO.BAS)  illustrates  an
  979.           example of a CALL to the Interrupt() routine.
  980.  
  981.                CALL Absolute()
  982.                CALL Int86Old()
  983.                CALL Int86XOld()
  984.                CALL Interrupt()
  985.                CALL InterruptX()
  986.  
  987.  
  988.  
  989.                        **   The $INCLUDE file B7T.BI   **
  990.                       ====================================
  991.  
  992.  
  993.           The  file B7T.BI contains the declarations for the Ctr() and
  994.           Delay() routines.  If you intend to use these routines, this
  995.           file must be used in BASIC's  metacommand  instructions  and
  996.           placed  at  the beginning of your code.  Generally, the TYPE
  997.           declarations for the Interrupt() and InperruptX() CALLs  are
  998.           also  placed  in  this  file.   Please see the demonstration
  999.           source code (B7T-DEMO.BAS) for an example of  a  metacommand
  1000.           instruction  or consult your BASIC PDS reference manuals for
  1001.           information on $INCLUDE: files.
  1002.  
  1003.  
  1004.  
  1005.                 **   A demonstration of the B7Tool Library   **
  1006.                =================================================
  1007.  
  1008.  
  1009.           There is an  old  cliche  that states, "A picture is worth a
  1010.           thousand words".  So, provided with  B7Tool  is  the  source
  1011.           code   [B7T-DEMO.BAS]  for  a  short  demonstration  of  its
  1012.           routines.   This  source  code  will  give  you   a   better
  1013.           understanding  as  to  the actual usage of the B7T routines.
  1014.           The code is presented in an ASCII format and can  be  viewed
  1015.           with  any  common  text editor or sent to your printer using
  1016.           the syntax;  COPY B7T-DEMO.BAS PRN.  This  demonstration  is
  1017.           quite   simple   and   by  no  means  illustrates  the  only
  1018.           application for the B7Tool Library.  If you wish to  compile
  1019.           this demo, the following command line syntax should be used.
  1020.  
  1021.           From the DOS command line for a stand-alone EXE:
  1022.  
  1023.                BC B7T-DEMO/O/Fs;
  1024.                LINK B7T-DEMO,,,B7T;
  1025.  
  1026.           To start BASIC PDS and load B7T-DEMO.BAS:
  1027.  
  1028.                QBX /L B7T B7T-DEMO
  1029.  
  1030.           The  B7T-DEMO  provided  with  this release was compiled and
  1031.           linked  within  the  QBX  environment for a stand-alone EXE.
  1032.           The following compile and link switches were used by the QBX
  1033.           environment.
  1034.  
  1035.              Compile:  /O/Ot/Fs/Lr/FPi/T/C:512
  1036.  
  1037.              Link:  /EX/NOE/NOD:BRT71EFR.LIB
  1038.  
  1039.              Libraries linked:  BCL71EFR.LIB and B7T.LIB
  1040.  
  1041.  
  1042.  
  1043.                   **   Compiling with the B7Tool Library   **
  1044.                  =============================================
  1045.  
  1046.  
  1047.           When starting BASIC PDS, you will need to  supply  the  name
  1048.           of  the  library  to  look  to for external references.  The
  1049.           following is an example of this command line using  the  B7T
  1050.           library.
  1051.  
  1052.                QBX /L B7T [YOURFILE.BAS]
  1053.  
  1054.           All  of  the  OBJ  modules  within  the  B7Tool Library were
  1055.           compiled using  the  command-line  compiler  (BC)  and  were
  1056.           supplied with the /O (stand-alone EXE) and /Fs (far strings)
  1057.           switches.   BASIC  will  not allow modules compiled for near
  1058.           strings to be mixed with modules compiled for  far  strings.
  1059.           If  you  intend to mix the B7T OBJ modules with some of your
  1060.           own modules, be sure your OBJ modules  were  compiled  using
  1061.           the  /Fs switch.  Within the QBX environment the near string
  1062.           model is never used  and are always compiled for far strings
  1063.           (/Fs).
  1064.  
  1065.           B7Tool  can  be  linked  to  your  object  modules using the
  1066.           standard DOS command line.  This process  avoids  the  BASIC
  1067.           PDS  environment  entirely.  Your source code (BAS) needs to
  1068.           be saved in text (ASCII) format in order for BC  to  operate
  1069.           properly.   The  following  syntax has been tested and works
  1070.           quite well.
  1071.  
  1072.              For stand-alone EXE  -  BC YOURFILE.BAS/O/Fs;
  1073.                                      LINK YOURFILE.OBJ,,,B7T.LIB;
  1074.  
  1075.              For run-time EXE  -  BC YOURFILE.BAS/Fs;
  1076.                                   LINK YOURFILE.OBJ,,,B7T.LIB;
  1077.  
  1078.              Note:   Be  sure  you  supply  all necessary command line
  1079.                      switches  needed  for  your  source   code   when
  1080.                      compiling (BC).  [i.e.  BC YOURFILE.BAS/O/E/X/Fs]
  1081.  
  1082.           Please   consult  your  BASIC  reference  manuals  for  more
  1083.           detailed information on compiling and linking your  programs
  1084.           from the DOS command line.
  1085.  
  1086.  
  1087.  
  1088.                    **   A look inside the B7Tool Library   **
  1089.                   ============================================
  1090.  
  1091.  
  1092.           The  B7Tool  Library  is  comprised  of  eight  object  code
  1093.           modules.  With  this type of construction, it is possible to
  1094.           build libraries  containing  only  the  particular  routines
  1095.           desired, or incorporate them into existing libraries.  These
  1096.           modules are provided to you (on disk) upon your registration
  1097.           of  B7Tool.   Below  is a list of the object modules and the
  1098.           routines contained in each.
  1099.  
  1100.                 Module Name         Routines          Source Type
  1101.                 -----------         --------          -----------
  1102.  
  1103.                 B7TOOL.OBJ          Ctr()                 BAS
  1104.                                     Delay()               BAS
  1105.  
  1106.                 B7WIND.OBJ          DoWindow()            BAS
  1107.  
  1108.                 B7MOUSE.OBJ         Mouse*()              BAS
  1109.  
  1110.                 PRTSCRN2.OBJ        PrtScrn()             ASM
  1111.  
  1112.                 PUTSCRN2.OBJ        PutScrn()             ASM
  1113.  
  1114.                 GETSCRN2.OBJ        GetScrn()             ASM
  1115.  
  1116.                 B7MENU.OBJ          BarMenu()             BAS
  1117.  
  1118.                 B7EQUIP.OBJ         GetDirve()            BAS
  1119.                                     SetDrive()            BAS
  1120.                                     DriveSpc()            BAS
  1121.                                     GetVideo()            BAS
  1122.                                     SetVideo()            BAS
  1123.                                     GetDOS()              BAS
  1124.                                     GetSize()             BAS
  1125.                                     GetComPorts()         BAS
  1126.                                     Get87()               BAS
  1127.  
  1128.           The routine DoWindow() does make CALLs  to  PRTSCRN2.OBJ and
  1129.           must  have  access  to  its services.  When using the B7WIND
  1130.           module, the PRTSCRN2 module should always be linked with it.
  1131.  
  1132.           If  B7MOUSE.OBJ  is  used separately, it must have access to
  1133.           QBX.LIB or QBX.QLB if used within the BASIC PDS environment.
  1134.  
  1135.           The BarMenu() routine makes CALLs to the following  routines
  1136.           and must have access to their services.
  1137.  
  1138.                 DoWindow()    PrtScrn()   GetScrn()   PutScrn()
  1139.  
  1140.           If   a  mouse  in  intended  for  use  with  BarMenu()  then
  1141.           B7MOUSE.OBJ also  must  be  accessible.
  1142.  
  1143.  
  1144.  
  1145.                    **   A look inside the B7Tool Library   **
  1146.                   ============================================
  1147.  
  1148.  
  1149.           The screen  handling  modules  (ASM)  employ  direct  memory
  1150.           access and assume the segment address of the regen buffer to
  1151.           be the following:
  1152.  
  1153.                       Card Type             Segment Address
  1154.                      -----------           -----------------
  1155.  
  1156.                       Monochrome                 B000H
  1157.  
  1158.                       Color                      B800H
  1159.  
  1160.           The  following  is  a list of internal variables used in the
  1161.           mouse routines.  These variable names should not be used  by
  1162.           your  program  structure  in  conjunction with the COMMON or
  1163.           SHARED Statements.
  1164.  
  1165.                visible33%       mouse1buf33%()     mouse2buf33%()
  1166.  
  1167.           The  remaining  variables  within  the  B7T   routines   are
  1168.           initialized upon their CALL and are not defined as SHARED.
  1169.  
  1170.  
  1171.  
  1172.                        **   String Descriptor Block   **
  1173.                       ===================================
  1174.  
  1175.  
  1176.           The  following four BASIC PDS routines are also incorporated
  1177.           within the B7Tool Library.
  1178.  
  1179.             StringAssign  StringRelease  StringAddress  StringLength
  1180.  
  1181.           Because  the  structure  of  the far string descriptor block
  1182.           for fixed length strings is proprietary and unknown  at  the
  1183.           time  of  this writing, these BASIC PDS routines are used in
  1184.           the ASM modules to decipher the descriptor block  for  their
  1185.           use.   You  also  have  access  to these services because of
  1186.           their inclusion in the B7Tool  Library.   Please  refer  the
  1187.           your BASIC PDS Reference Manual, "Mixed-Language Programming
  1188.           with  Far  Strings",  for more specific information on their
  1189.           structure and use.
  1190.  
  1191.  
  1192.  
  1193.               **   A few final notes about the B7Tool Library   **
  1194.              ======================================================
  1195.  
  1196.  
  1197.           This documentation is not written to be a tutorial and makes
  1198.           the  assumption  you  have  some  knowledge  of  the calling
  1199.           conventions for BASIC PDS.  The  demonstration  source  code
  1200.           (B7T-DEMO.BAS)  was  written  to  provide you with a working
  1201.           example of the B7T routines and  is  a  valuable  source  of
  1202.           information.
  1203.  
  1204.           B7Tool was developed and tested on a 8088  machine,  running
  1205.           at  8  mhz,  and  a  80386sx machine, running at 16 mhz, and
  1206.           should perform as expected on most computers within the "86"
  1207.           family.
  1208.  
  1209.  
  1210.  
  1211.                 **   The Shareware principle works for you   **
  1212.                =================================================
  1213.  
  1214.  
  1215.           R. J. Crouch
  1216.           CareWare
  1217.           10217 Ridge View Dr.
  1218.           Grass Valley, CA  95945
  1219.           (916) 477-6024 * CIS 74270,516
  1220.  
  1221.  
  1222.           This program is produced by a member of the  Association  of
  1223.           Shareware  Professionals (ASP).  ASP wants to make sure that
  1224.           the shareware principle works for you.  If you are unable to
  1225.           resolve a shareware-related problem with an  ASP  member  by
  1226.           contacting the member directly, ASP may be able to help. The
  1227.           ASP Ombudsman can help you resolve a dispute or problem with
  1228.           an  ASP  member,  but does not provide technical support for
  1229.           members' products.  Please write to  the  ASP  Ombudsman  at
  1230.           545 Grover Road,  Muskegon, MI  49442  or  send a CompuServe
  1231.           message via easyplex to ASP Ombudsman 70007,3536.
  1232.  
  1233.  
  1234.                   _______
  1235.              ____|__     |                (R)
  1236.           --|       |    |-------------------
  1237.             |   ____|__  |  Association of
  1238.             |  |       |_|  Shareware
  1239.             |__|   o   |    Professionals
  1240.           -----|   |   |---------------------
  1241.                |___|___|    MEMBER
  1242.  
  1243.  
  1244.                             The B7Tool Library [B7T]
  1245.                                    Ver. 1.2a
  1246.                            Software Registration Form
  1247.                 _______________________________________________
  1248.  
  1249.  
  1250.          CareWare
  1251.          10217 Ridge View Dr.
  1252.          Grass Valley, CA  95945                      Date ____________
  1253.  
  1254.  
  1255.          Quantity        Type of registration          Cost      Total
  1256.          --------        --------------------          ----      -----
  1257.  
  1258.           ______    Registration of your current      $20.00    _______
  1259.                     copy
  1260.  
  1261.           ______    Registration & latest ver. of     $25.00    _______
  1262.                     B7Tool & OBJ modules on disk
  1263.  
  1264.           ______    All the above plus all OBJ        $50.00    _______
  1265.                     module source codes on disk
  1266.  
  1267.                                                     Subtotal    _______
  1268.  
  1269.  
  1270.           Disk size:  [ ] 5.25 (360)  -  [ ] 3.5 (720)          _______
  1271.                        (please add $1.00 for ea. 3.5)
  1272.  
  1273.           Please add $4.00 for disk shipping outside of U.S.    _______
  1274.           (first class air)
  1275.  
  1276.                                              Amount Enclosed    _______
  1277.  
  1278.  
  1279.           All  registered  user  will  receive  prompt  and  courteous
  1280.           support for this  product.
  1281.  
  1282.  
  1283.           Name ________________________________________________
  1284.  
  1285.           Address _____________________________________________
  1286.  
  1287.                   _____________________________________________
  1288.  
  1289.           City, State, Zip ____________________________________
  1290.  
  1291.           Phone (optional) ____________________________________
  1292.  
  1293.           Please  help  us track the distribution of B7Tool and let us
  1294.           know where you found this copy.
  1295.  
  1296.           ____________________________________________________________
  1297.  
  1298.           Please make payable to the author  -  R. J. Crouch
  1299.  
  1300.           ORDERS OUTSIDE  OF  U.S.   -   Please   send   international
  1301.           postal or money orders in U.S. dollars.
  1302.  
  1303.  
  1304.  
  1305.